using System;
using System.Collections.Generic;

namespace PluginFrame
{
	public interface IPcrStructure
	{
		DateTime CreateTime { get; set; }

		IApplication Application { get; }

		IPcrDataFile PcrDataFile { get; set; }

		Guid Guid { get; }

		IChannelConfiguration[] ChannelConfigurations { get; }

		PcrModuleState State { get; set; }

		IPcrInstrument PcrInstrument { get; }

		List<IPcrModule> PcrModules { get; set; }

		List<IPcrExperiment> PcrExperiments { get; set; }

		List<int> AvailableChannels { get; }

		PcrSystemType SystemType { get; set; }

		void AddPcrModule(IPcrModule pcrModule);

		void RemovePcrModule(IPcrModule pcrModule);

		IPcrModule GetPcrModule(int index);

		void RemoveExperiments(List<string> moduleID, PcrModuleState pcrModuleState);

		IPcrExperiment CreateNewExperiment(string experimentName, PcrSystemType systemType);

		IPcrExperiment FindExpriment(string experimentName);

		ICellIDPositionMap GetCellIDPositionMap(int cellID);

		List<int> GetCellIDsFromSubModule(int subModuleID);

		ICellIDPositionMap GetCellIDPositionMap(string cellPosition);

		List<IPcrCell> GetPcrCellInExperiment(string experimentName);

		IPcrCell GetCellFromCellIDMap(ICellIDPositionMap cellIDMap);

		int GetCellCount();

		bool Analyze();

		List<ISubModule> GetAvailablePcrSubModules();

		List<ISubModule> GetAllPcrSubModule();

		List<IPcrExperiment> FindExperimentWithSystemType(PcrSystemType systemType);

		void RemoveNotMatchExperiments(PcrSystemType systemType);
	}
}
